NocoBaseで申請・承認フローを作成する
やりたいこと
NocoBaseで作成したアプリケーションで管理しているユーザー向けに、ライセンスや見積もりなどを申請できる仕組み(ワークフロー)を用意したい。
そのフローでは、途中で承認者による手動承認がしたい。
どう対応すればいいの?
ワークフローの手動ノードを利用することで、思決定権限の一部を手動処理に引き渡すことができます。
ケース例
ソフトウェアの利用申請のワークフローを作ってみます。
申請者がフォームから内容を送信 -> 承認者によって決定される
という流れにしてみます。
コレクションの作成
コレクションを作成し、そこへの入力フォーム作ることで対応していきます。
データソースの設定画面で、 コレクションの作成
をクリックし、新規コレクションを作成します。
申請に必要な情報のフィールドを作成します。
今回は 申請ライセンス名 と 利用開始予定日 を追加しました。
送信フォームの作成(トリガー)
手動ノードのトリガーとなる 申請フォームを作成します。
ページ編集画面の ブロックを追加
からフォームを選択し、先ほど作成したコレクションを選択します
フィールドの設定
から コレクションに追加したフィールド(申請ライセンス名 と 利用開始予定日) をフォームに表示させます
ワークフローをトリガーするためのボタンを追加します。
操作の設定
から カスタマイズ->Submit to workflow を選択し、フォームに追加します。
承認ワークフローの作成
申請フォームからボタンを押された時に起動するワークフローを作成します.
ワークフローの設定画面で、追加
をクリックして作成します。
トリガータイプ: Post action Event にし、Execute mode: Asynchronously にします。
Post action Event は
データの追加、更新、削除、Submit to workflowなど、アクションボタンやAPIを介して開始されたリクエストの完了後にトリガーされます。アクション完了後のデータ処理、通知送信などに適しているものです。
作成後、設定画面に遷移し、トリガーの設定を行います。
Collectionは作成したコレクションを選択します。
トリガーモードですが、 Local modeを選択しました。
- Local mode: このワークフローにバインドされたアクションの完了後にトリガーされる。
- Global mode: 以下のアクションの完了後にトリガーされる。
- Create record action
- Update record action
次に+
をおして、Manualノードを追加します
Assignees
には申請を対応するNocoBase上のユーザーを設定したり、トリガーフィールドから送られたデータを利用することができます。
申請フォームに承認者というフィールドを追加し、そこで選択された人を担当に割り当てることもできそうですね。
User Interface
では手動で処理するためのフォームの作成を行います。
上記画像では、ブロックの追加でトリガーされたデータを表示させています。
Custom form
を追加して、現在のワークフローを続行するか、終了させるかを決定するボタンを追加します。
今回は続行ボタンが押されたらレコードを追加する処理を行うようにしました。
トリガーで送られてきたデータ(申請ライセンス名 と 利用開始予定日)と、承認済みフラグをTrueにする といった内容です。
最後にこのワークフローを有効にしておきます。
そうしないと申請フォームからこのワークフローをトリガーできません。
送信フォームからワークフローを呼び出せるようにする
作成した申請フォームのSubmit to worklowボタンのメニューを表示します
Bind workflows
をクリックします。
先ほど作成した申請・承認フローと名前をつけたワークフローを選択し、送信ボタンを押して設定完了です。
ワークフローの履歴を見れるブロック
送信されたワークフローを確認できるブロックをページに作成します
Workflow todos
というブロックを追加すると、一覧が見れる画面が作成できます。
動作確認
では、実際に申請してみましょう。
申請フォーム
作成した申請フォームから送信します。
ワークフローの設定画面
ワークフローの設定画面で、Executed
の数が増えているはずです。
手動ノードがフロー内にあるため、送信した段階では状態が処理中となっています。
Workflow todos の画面
先ほど作成した送信されたワークフローを確認できるブロックを確認すると、送信したワークフローが登録されています。
表示
をクリックすると、User Interface
で作成したフォームが表示されます。
内容を承認したいので、Continue the process
を押して次のノードに送ります。
状態はResolved
に変更されました。
ワークフローの設定画面
ワークフローの実行履歴を確認してみましょう。
手動ノードのあとにレコード追加のノードが実行されて、レコードが追加されていました。
User Interface
で作成したフォームで、Terminate the process
を押して申請を却下した場合、
状態がRejected
となり、レコード追加のノードは実行されません。